#include<stdio.h>
#include<unistd.h>
int main(){
  pid_t id =fork();  //操作系统在fork() return之前就已经完成对线程的创建，并且操作系统可以同时调用父子线程
                      //因为在return 返回的时候 会返回两次值
                      //由于子进程共享父进程代码与数据的同时，如果不对数据进行修改，系统不会为其子进程copy一份父进程的数据，只有当进程运行过程中
                      //需要对父进程数据进行修改的时候，系统会发生写时拷贝，这样子进程修改数据的时候，并不会影响到父进程数据
                      //id属于父进程的数据，当fork返回值的时候相当于给父进程数据进行写入，因为子线程会进行写时拷贝，所以父子进程fork id返回值不同
 // while(1){
 // printf("I am is process,pid:%d,ppid%d\n",getpid(),getppid());
 //sleep(1);
 //}
 printf("进程开始运行，pid=%d,ppid=%d\n",getpid(),getppid());
 if(id == 0){
  while(1){

    printf("子进程开始运行，pid=%d,ppid=%d\n",getpid(),getppid());

    sleep(1);
  }
}
 else if(id>0){
 while(1){
  
   printf("父进程开始运行，pid=%d,ppid=%d\n",getpid(),getppid());

   sleep(1);

 }
}
 else{

 }
return 0;
}
